#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int N=1e5+50;
int n;
ll a[N];
ll bit1[N],bit2[N];
int v[N];
//判断相邻两个数能确定多少位
void deal(ll a,ll b){
    for(int i=1;i<=60;i++){
        bit1[i]=a%2;
        a/=2;
    }
    for(int i=1;i<=60;i++){
        bit2[i]=b%2;
        b/=2;
    }
    int ans;
    //找出a和b第一个二进制位不同的
    for(int i=60;i>=1;i--){
        if(bit1[i]==bit2[i]){
            continue;
        }
        ans=i;
        break;
    }
    //标记
    v[ans]=1;
}
int main(void){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
    }
    for(int i=1;i<n;i++){
        deal(a[i],a[i+1]);
    }
    ll ans=0;
    //计算不确定的位数，那么S的可能个数就是2^ans
    for(int i=1;i<=60;i++){
        if(v[i]){
            continue;
        }
        ans++;
    }
    printf("%lld\n",1L<<ans);
    return 0;
}